﻿namespace MicroCloud.Filter
{
    /// <summary>
    /// 数据分页信息
    /// </summary>
    public class PageResult<T>
    {
        #region 构造函数
        /// <summary>
        /// 初始化一个数据分页信息 <see cref="PageResult{T}"/> 的新实例
        /// </summary>
        public PageResult()
            : this(Array.Empty<T>(), 0)
        { }

        /// <summary>
        /// 初始化一个数据分页信息 <see cref="PageResult{T}"/> 的新实例
        /// </summary>
        /// <param name="data">分页数据</param>
        /// <param name="total">总记录数</param>
        public PageResult(T[] data, long total)
        {
            Data = data;
            Total = total;
        }

        #endregion

        #region 属性
        /// <summary>
        /// 获取或设置 分页数据
        /// </summary>
        public T[] Data { get; set; }

        /// <summary>
        /// 获取或设置 总记录数
        /// </summary>
        public long Total { get; set; }

        #endregion        

        #region 方法
        /// <summary>
        /// 转换为分页数据
        /// </summary>
        public PageData<T> ToPageData()
        {
            return new PageData<T>(Data, Total);
        }
        
        /// <summary>
        /// 转换为指定类型的页结果
        /// </summary>
        /// <typeparam name="TResult">页结果数据类型</typeparam>
        /// <param name="func">数据转移委托</param>
        /// <returns>页结果</returns>
        public PageResult<TResult> ToPageResult<TResult>(Func<T[], TResult[]> func)
        {
            return new PageResult<TResult>(func(Data), Total);
        }

        #endregion

    }
 
}
